{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn import svm\n",
    "import scipy.io\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import random"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def k_partition(seq, k):\n",
    "\tavg = len(seq) / float(k)\n",
    "\tout = []\n",
    "\tlast = 0.0\n",
    "\twhile last < len(seq):\n",
    "\t\tout.append(seq[int(last):int(last + avg)])\n",
    "\t\tlast += avg\n",
    "\treturn out"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 :  0.931847548616\n",
      "2 :  0.94441640526\n",
      "3 :  0.951908417013\n",
      "4 :  0.958432784817\n",
      "5 :  0.960850580353\n",
      "6 :  0.963509337633\n",
      "7 :  0.966167802838\n",
      "8 :  0.967859500318\n",
      "9 :  0.969309651905\n",
      "10 :  0.970517381374\n",
      "11 :  0.970759219342\n",
      "12 :  0.972209370929\n",
      "13 :  0.972451208898\n",
      "14 :  0.97293459276\n",
      "15 :  0.973176430729\n",
      "16 :  0.973901360485\n",
      "17 :  0.974626290241\n",
      "18 :  0.974625998166\n",
      "19 :  0.974142906378\n",
      "20 :  0.974384744347\n",
      "21 :  0.975351512071\n",
      "22 :  0.975109674103\n",
      "23 :  0.975109674103\n",
      "24 :  0.975351219997\n",
      "25 :  0.975350927922\n",
      "26 :  0.975350927922\n",
      "27 :  0.975350927922\n",
      "28 :  0.975350927922\n",
      "29 :  0.975592181741\n",
      "30 :  0.976317111497\n",
      "31 :  0.976317111497\n",
      "32 :  0.976317111497\n",
      "33 :  0.976317111497\n",
      "34 :  0.976317111497\n",
      "35 :  0.976075565603\n",
      "36 :  0.976075565603\n",
      "37 :  0.975833727634\n",
      "38 :  0.975833727634\n",
      "39 :  0.975833727634\n",
      "40 :  0.975833727634\n",
      "41 :  0.976075565603\n",
      "42 :  0.976317111497\n",
      "43 :  0.976558949465\n",
      "44 :  0.976800787434\n",
      "45 :  0.976800787434\n",
      "46 :  0.976558949465\n",
      "47 :  0.976558949465\n",
      "48 :  0.976317111497\n",
      "49 :  0.976317111497\n",
      "50 :  0.976317111497\n",
      "51 :  0.976317111497\n",
      "52 :  0.976317111497\n",
      "53 :  0.976317111497\n",
      "54 :  0.976075565603\n",
      "55 :  0.976075565603\n",
      "56 :  0.976075565603\n",
      "57 :  0.976075565603\n",
      "58 :  0.975834019709\n",
      "59 :  0.975834019709\n",
      "60 :  0.975834019709\n",
      "61 :  0.975834019709\n",
      "62 :  0.976075565603\n",
      "63 :  0.976075565603\n",
      "64 :  0.976558949465\n",
      "65 :  0.976317111497\n",
      "66 :  0.97655865739\n",
      "67 :  0.97655865739\n",
      "68 :  0.97655865739\n",
      "69 :  0.976317111497\n",
      "70 :  0.976075273528\n",
      "71 :  0.976075273528\n",
      "72 :  0.975833727634\n",
      "73 :  0.976075273528\n",
      "74 :  0.976075273528\n",
      "75 :  0.976075273528\n",
      "76 :  0.976316819422\n",
      "77 :  0.976316819422\n",
      "78 :  0.97655865739\n",
      "79 :  0.97655865739\n",
      "80 :  0.97655865739\n",
      "81 :  0.97655865739\n",
      "82 :  0.97655865739\n",
      "83 :  0.976800495359\n",
      "84 :  0.976800495359\n",
      "85 :  0.976800495359\n",
      "86 :  0.976800495359\n",
      "87 :  0.976558949465\n",
      "88 :  0.976800495359\n",
      "89 :  0.976558949465\n",
      "90 :  0.976800495359\n",
      "91 :  0.976558949465\n",
      "92 :  0.976800495359\n",
      "93 :  0.976800495359\n",
      "94 :  0.976800495359\n",
      "95 :  0.976800495359\n",
      "96 :  0.976800495359\n",
      "97 :  0.976800495359\n",
      "98 :  0.97655865739\n",
      "99 :  0.97655865739\n",
      "[0.93184754861585728, 0.94441640525968373, 0.95190841701277551, 0.95843278481678129, 0.96085058035270965, 0.96350933763267488, 0.96616780283779913, 0.96785950031836143, 0.96930965190520413, 0.97051738137380317, 0.97075921934236431, 0.97220937092920678, 0.97245120889776793, 0.9729345927600489, 0.97317643072860993, 0.97390136048461051, 0.9746262902406112, 0.97462599816576989, 0.97414290637833045, 0.9743847443468916, 0.97535151207145321, 0.97510967410289218, 0.97510967410289218, 0.9753512199966119, 0.97535092792177081, 0.97535092792177081, 0.97535092792177081, 0.97535092792177081, 0.97559218174064932, 0.97631711149665001, 0.97631711149665001, 0.97631711149665001, 0.97631711149665001, 0.97631711149665001, 0.97607556560293018, 0.97607556560293018, 0.97583372763436904, 0.97583372763436904, 0.97583372763436904, 0.97583372763436904, 0.97607556560293018, 0.97631711149664979, 0.97655894946521093, 0.97680078743377197, 0.97680078743377197, 0.97655894946521093, 0.97655894946521093, 0.97631711149664979, 0.97631711149664979, 0.97631711149664979, 0.97631711149664979, 0.97631711149664979, 0.97631711149664979, 0.97607556560292996, 0.97607556560292996, 0.97607556560292996, 0.97607556560292996, 0.97583401970921035, 0.97583401970921035, 0.97583401970921035, 0.97583401970921035, 0.97607556560292996, 0.97607556560292996, 0.97655894946521093, 0.97631711149664979, 0.97655865739036973, 0.97655865739036973, 0.97655865739036973, 0.97631711149665001, 0.97607527352808887, 0.97607527352808887, 0.97583372763436904, 0.97607527352808887, 0.97607527352808887, 0.97607527352808887, 0.9763168194218087, 0.9763168194218087, 0.97655865739036973, 0.97655865739036973, 0.97655865739036973, 0.97655865739036973, 0.97655865739036973, 0.97680049535893088, 0.97680049535893088, 0.97680049535893088, 0.97680049535893088, 0.97655894946521093, 0.97680049535893088, 0.97655894946521093, 0.97680049535893088, 0.97655894946521093, 0.97680049535893088, 0.97680049535893088, 0.97680049535893088, 0.97680049535893088, 0.97680049535893088, 0.97680049535893088, 0.97655865739036973, 0.97655865739036973]\n",
      "Max*** 44 :  0.976800787434\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nLwUWIiIikjMFFVhES6arK0RERCQ/CiqwUIuFiKTSuXNnzjvvvE3bM2bMoKioiNdff73Wffv27cvR\nRx+d0/JceeWVlDSiJZjnzZtHUVERkydPzndRpAAosBCRRuGkk06idevWfP/992nzDBo0iK222orl\ny5dndWwzyygt030z8f333zN27FhmzZqV8phFRYXx8fvaa68xduxYVq1ale+iSCNRGO/smKgrZJtt\n8lsOEcneoEGDWLt2LY8//njK59esWcO0adM47rjjaNeu3Wad64gjjmDNmjUcdNBBm3WcmqxatYqx\nY8fyyiuvVHuukL6IZ82axbXXXsu3336b76JII1FQgcXKlbDttlBcnO+SiEi2TjzxRLbeeuu0zfFP\nPPEEq1evZtCgQTk5X/PmzXNynHTcPe1zRUVFjaorZHPU9DqbkjVr1uS7CI1GwQUW6gaRpm7SJKis\nTP1cZWV4vjEeu0WLFgwYMIAZM2bw9ddfV3t+8uTJbLPNNpxwwgmb0n77299y8MEHs91229GqVSt6\n9erFE088Ueu50o2x+POf/8zuu+9Oq1at6NOnT8oxGD/88ANXXXUV5eXltG3blq233prDDjuMV199\ndVOeefPm0alTJ8yMK6+8kqKiIoqKirjxxhuB1GMs1q9fz9ixY9l9991p0aIFXbp04eqrr2bdunUJ\n+Tp37syAAQN45ZVX6N27Ny1btmSPPfbIeHzE8uXLGTJkCG3btqV9+/YMHz48ZWvDu+++y9ChQ+nS\npQstWrRgp5124txzz03ohrrqqqv49a9/valcRUVFFBcXs3jxYgD+8pe/cMQRR9ChQwdatmzJj370\nI+65556MypnJ+SOff/45w4YNo1OnTrRs2ZLdd9+dUaNGsXHjxoTX/Ytf/ILS0lJatGjBrrvuys9/\n/nNWxJq67733XoqKijaVPZLqvdK3b1/Kysp46623OOSQQ2jdujVjxowB4PHHH+f4449n5513pkWL\nFnTt2pUbb7wxZQD2xhtvcOyxx9KuXTu23npr9t13X+64446E8rz//vvV9rv22mspKSnhyy+/zKgu\nG1qzfBcglxRYiEC/fjBsGEyYAKWlVemVlVXpjfHYELpDJk2axNSpU7nwwgs3pS9fvpznn39+0xiL\nyG233capp57K4MGD+fe//83kyZM59dRTefbZZ2sdcJk8duKuu+7ioosu4tBDD+Xiiy9m3rx5nHDC\nCbRt25bdd999U74VK1YwceJEBg4cyMiRI/n222+59957Ofroo3n77bfZe++96dixI3fccQcXXXQR\np512GieddBIA++6776ZzJ5//5z//OZMnT+bMM8/kkEMO4c033+T666/no48+4m9/+1tCuT/66CPO\nPPNMRowYwTnnnMO9997L0KFD6dWrF127dk37mt2dE044gb///e9ceOGFdO/enUcffZRzzjmnWnme\ne+45Fi5cyPDhw+nYsSP//Oc/ueuuu5g7d+6mcSOnn346n376KVOnTuVPf/oTbWO35LVv3x4Igdp+\n++3HSSedRLNmzXjyyScZOXIkAOeee26Nf59Mzg+waNEievXqxapVqzj//PPp3r07Cxcu5OGHH2bt\n2rW0atWKVatW0bdvXz799FOGDx/Ovvvuy1dffcWTTz7J4sWLadu2bcq/SXydJ29/+eWX/PSnP2XQ\noEEMHTqUnXbaCYCJEyfSpk0bLrnkElq3bs2MGTO48sor+f7777nhhhs2HWP69OmcdNJJdO7cmUsu\nuYQdd9yRDz74gKeffnrT++a//uu/eOihhzYFpJHJkydz1FFHseOOO9ZYh3nj7lvkAygDvKKiwiND\nhrj37esiTd78+e6HHx5+ptpurMfesGGDd+rUyQ8++OCE9DvvvNOLior8hRdeSEhfu3Ztwva6det8\nr7328mOOOSYhvXPnzn7uuedu2n7hhRe8qKjIX3vtNXd3//e//+3bb7+99+7d29evX59wXjPzo446\nKqGM69atSzj+ihUrfIcddvDzzz9/U9oXX3zhZuY33HBDtdd55ZVXeklJyabtiooKNzO/6KKLEvKN\nHj3ai4qKfNasWQmvpaioyN98882EczVv3tyvuOKKaueK98gjj7iZ+X//938nvJ6DDz7Yi4qK/KGH\nHtqUnly37u4PPvhgtXPffPPNXlRU5IsWLaqWP9UxjjzySN9zzz1rLGc25z/rrLO8pKTE33333bTH\n+vWvf+1FRUX+9NNPp81z7733pnwdye8Vd/e+fft6UVGR33fffRmVe8SIEb7ttttuem+tX7/ed911\nV+/atat/9913act0+umn+2677ZaQNnv2bDcznzx5ctr9MlFRUeGAA2We4+9ndYWIFKDS0tB6MHQo\n3HMPnHYaXHwxfPMNzJmzeY9vvgnHOu20cOyhQ6u3YNRVUVERZ555Jm+88QYLFizYlD558mQ6dOjA\nT37yk4T88a0XK1asYMWKFfTt25c5c+Zkdd6///3vLFu2jAsuuIDiuEFaw4YNY5uk0eBFRUU0axYa\ne92d5cuXs27dOvbff/+szxt55plnMDNGjx6dkH7JJZfg7jz99NMJ6T179uSAAw7YtN2hQwe6du3K\nZ599VuN5nn32WbbaaquEW2+LiooYNWpUtab6+Lr94YcfWLZsGQcccADunvHrjD/Gt99+y7Jly+jX\nrx8ff/xxrWMSMjn/hg0bmDZtGqeccgo9e/ZMe6zHHnuM8vJyjjvuuIzKnYlWrVpx9tln11juVatW\nsWzZMvr27cuqVav4+OOPAXj77bdZuHAho0ePZuutt057jiFDhrBw4cKEbraHHnqIrbfempNPPjln\nryXXCq4rpFOnfJdCpHEoLYXBgyH6DokbmpAzb78Nd9+dm6AiMmjQIMaNG8fkyZO5/PLLWbRoEbNm\nzeKXv/xltSbpadOmceONN/Luu+/yww8/bErPdmDmv/71L8yMPfbYIyG9pKSE0hQv7r777uPWW2/l\no48+Yv369ZvSu3XrltV548/frFmzhC4XgJ133pltttmGf/3rXwnpu+66a7VjtGvXrtbbcP/1r39t\n6vuP171792p5ly1bxjXXXMPUqVP56quvNqWbGSuje/tr8eqrrzJmzBhmz57N6tWrqx2jZcuWaffN\n5PxLly7l+++/Z++9966xHPPmzWPw4MEZlTlTnTt3TghCI//85z/5zW9+w8svv8x3332Xstzz5s3D\nzGot9zHHHMMOO+zAQw89xCGHHMLGjRv529/+xoABA2qsu3wruMCiR498l0KkcaishAcfDF/8d98N\nY8bkLvBevBjGjg1By4MPwlFH5S64KCsrY88992TKlClcfvnlmwYlnnXWWQn5XnrpJU455RR+8pOf\ncOedd9KxY0dKSkq45557ePTRR3NTmBQmTpzI8OHD+dnPfsYVV1zBDjvsQHFxMddddx2LFi2qt/PG\nS/WFBrm9Q+PUU0+loqKCyy67jJ49e9K6dWvWrVvHcccdlzAoMp1PPvmEo446ih/96EeMGzeOXXbZ\nhebNmzNt2jRuv/32Wo+xuefPVrrxFRs2bEiZnuqLffny5Rx66KFst9123HTTTZsGis6ePZvf/OY3\nWZe7uLiYgQMH8sADD3D77bfz4osv8uWXX+Y8SMq1ggosVqzQdN4iUDWYctKk8IV/1FGpB13W9di/\n+hU8/HDujx0ZNGgQV199Nf/3f//HlClT6Nq1K+Xl5Ql5HnvsMVq3bs306dMTvmjvuuuurM+32267\n4e588skn9O3bd1P6unXrqKyspEOHDpvSHn30Ubp3787UqVMTjhHdHRHJZmKt3XbbjfXr1zNv3ryE\nVovFixfz3Xffsdtuu2X7ktKeZ9asWaxduzah1eLDDz9MyLds2TJeeeUVbrrpJi677LK0+SD965w2\nbRrr1q3j6aefTqi/5557rtZyZnr+Dh060Lp1a/75z3/WeLzdd9+91jzR3CgrVqygU1wEXpnuNqgU\nXnzxRVauXMmzzz6b0FX10UcfVSuPu/PPf/6TQw89tMZjDhkyhNtuu41nnnmGxx57jI4dO3LEEUdk\nXKZ80BgLkQITf4dG9EUfjbkYNiz97aL5Pna8QYMG4e5cffXVvPPOOymv0IqLiykqKkq4ovzss894\n6qmnsj7fAQccQPv27bnzzjsTjnfvvfcmNGdH50322muv8dZbbyWktW7dGmDT7Yw1Oe6443B3/vjH\nPyak33LLLZgZxx9/fMavpbbz/PDDDwnB14YNG/jTn/6UECBErzH5CnvcuHHVAol0rzPVMZYvX879\n999fazkzPX9xcTEnnXQSTzzxBO+++27a40WtH8ljVeJFX/bxE5pt2LCBu+++u9by1lTuH374gT//\n+c8J+Xr16sWuu+7KuHHjap1YbL/99mOvvfbi7rvv5vHHH+ess86q82ywDaVgWizcFViIAMycmbr1\nIAoAZs6se8tCfR478XilHHTQQTz55JOYWbVuEIDjjz+e2267jf79+zNw4ECWLFnC+PHj6d69e8p7\n/5PFdxuUlJRw3XXXMWrUKA4//HDOOOMMPv30U+6//366dOmSsN9Pf/pTpk2bxoABAzj22GOZN28e\nd911F3vttVfCOI/WrVvTrVs3pkyZQpcuXWjXrh09e/akR4r+2rKyMgYNGsT48eNZtmwZhxxyCG+8\n8QYPPvggp59+OgcffHA21ZfWKaecwoEHHsivfvUr5s2bt+l20/jxDwBt27bloIMO4qabbmLNmjV0\n6tSJ6dOns2DBgmrdLeXl5bg7V1xxBaeddholJSWcfPLJ9O/fn8suu4zjjjuOc889l2+//ZZ77rmH\nnXbaqdb5F7I5/80338yLL75I3759GTlyJN27d2fRokU8/PDDvPXWW7Rq1YrLLruMRx99lAEDBjBs\n2DD2228/li1bxpNPPsmECRPYa6+96NmzJ7169eL//b//x5dffknbtm2ZMmVKVlOv9+3bl2233ZbB\ngwfzn//5n2zcuJEHHnhg02DfSFFREePHj+eUU05h33335ZxzzqFjx458+OGHfPTRR/zP//xPQv6z\nzz6byy+/HDPL2QRx9SrXt5k01IOk202/+84d3KdMye6WGxFpnMaPH+9FRUXep0+ftHnuvfde79at\nm7ds2dL33ntvf+CBB6rdyunuvssuu/h55523aTvVLYTRObt06eItW7b0Pn36+Ouvv+6HHHKIH330\n0Qn5brjhBi8tLfVWrVr5/vvv79OnT/fBgwd7t27dEvK99tprvv/++3uLFi28qKho062nV155pTdv\n3jwh7/r1633s2LHepUsX32qrrby0tNSvvvrqare27rLLLj5gwIBqddG3b99q5Uzlm2++8bPPPtvb\ntGnj7du392HDhvmcOXOq3W76+eef+4ABA7xdu3bevn17P+uss3zx4sVeVFTkN954Y8Ixr732Wu/c\nubM3a9Ys4ZbNadOmec+ePb1ly5a+++67+7hx4/yee+5Je3tqvGzOv2DBAh8yZIh36NDBW7Zs6Xvs\nsYf/4he/8A0bNmzKs2zZMh81apR37tzZW7Ro4bvttpuPGDHCV6xYsSnPvHnz/Mgjj/SWLVt6p06d\nfMyYMf7888+nvN20rKwsZblfe+01P/DAA71169beuXNnv/LKK3369Okp32+zZs3yo446yrfddlvf\nZpttfL/99vO77rqr2jEXLVrkxcXFvs8++9RYZ9moz9tNzXM42KchmVkZUFFRUUFZWRmLFkHnzvDM\nM3DssfkunYiISG589dVXdOrUiRtuuIFLL700J8ecM2dONG6p3N3rdp90GgUzxkIrm4qISCH6y1/+\nArBldINQQGMsFFiIiEghefHFF3n//fe5+eab+dnPfsbOO++c7yJlZItvsYjWi4kGJEe3m27ugkgi\nIiL5NGbMGC699FJ69+5d7Y6hxmyLb7EYOxZ+9KPEFotcLYgkIiKSL/FTeW9JtvgWizFjQhAxbx4U\nF8NXX+V+sh4RERHJzBbfYtGpUwgijjwSWraE4cMVVIiIiOTLFt9iAVWLLa1aFVowFFSIiIjkR0EE\nFpWV8Mor8PLLYcxFrqYVFhERkexs8YHF4sVVYyr69cv9mgUiIiKSuS0+sBg7tv4XRBIREZHMbPGB\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7feb377b7ef0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pathname = 'hw01_data/'\n",
    "\n",
    "spam = scipy.io.loadmat(pathname + 'spam/spam_data_BOW_validation.mat')\n",
    "all_validation_accuracy = []\n",
    "# all_C = [1e-3, 1e-2, 1e-1, 1, 10, 100, 1000]\n",
    "all_C = list(range(1, 100))\n",
    "\n",
    "all_training_data = spam['training_data']\n",
    "all_training_labels = spam['training_labels'].ravel()\n",
    "\n",
    "idx = list(range(0,all_training_data.shape[0]))\n",
    "random.shuffle(idx)\n",
    "\n",
    "k = 5\n",
    "idx_k = k_partition(idx, k)\n",
    "\n",
    "for C in all_C:\n",
    "\t\n",
    "\tk_accuracy = []\n",
    "\tfor i in range(0, k):\n",
    "\t\tvalidation_idx = idx_k[i]\n",
    "\t\ttraining_idx = list(set(validation_idx)^set(idx))\n",
    "\t\ttraining_data = all_training_data[training_idx]\n",
    "\t\ttraining_labels = all_training_labels[training_idx]\n",
    "\t\tvalidation_data = all_training_data[validation_idx]\n",
    "\t\tvalidation_labels = all_training_labels[validation_idx]\n",
    "\t\tclf = svm.LinearSVC(C=C)\n",
    "\t\tclf.fit(training_data, training_labels)\n",
    "\t\ttraining_predict = clf.predict(training_data)\n",
    "\t\tvalidation_predict = clf.predict(validation_data)\n",
    "\t\tvalidation_match = np.equal(validation_labels, validation_predict)\n",
    "        validation_accuracy = sum(validation_match) / len(validation_match)\n",
    "\t\t# print(validation_accuracy)\n",
    "\t\tk_accuracy.append(validation_accuracy)\n",
    "\tprint(C, ': ', sum(k_accuracy)/float(k))\n",
    "\tall_validation_accuracy.append(sum(k_accuracy)/float(k))\n",
    "print(all_validation_accuracy)\n",
    "\n",
    "max_idx = all_validation_accuracy.index(max(all_validation_accuracy))\n",
    "print('Max***', all_C[max_idx], ': ', max(all_validation_accuracy))\n",
    "\n",
    "plt.plot(all_C, all_validation_accuracy, label='Validation data accuracy', marker='x')\n",
    "plt.legend(loc='lower right', frameon=False)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note:\n",
    "C~=50 for SPAM with bag-of-words features"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [conda env:dsb2017]",
   "language": "python",
   "name": "conda-env-dsb2017-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
